package com.hongxun.project.assets.exportdetailed;

import com.hongxun.common.utils.DateUtils;
import com.hongxun.common.utils.StringUtils;
import com.hongxun.common.utils.file.FileUtils;
import com.hongxun.framework.config.RuoYiConfig;
import com.hongxun.framework.web.controller.BaseController;
import com.hongxun.project.assets.Tools.OutPutUtils;
import com.hongxun.project.assets.bByq.domain.BByq;
import com.hongxun.project.assets.bByq.service.IBByqService;
import com.hongxun.project.assets.iDevice.domain.IDevice;
import com.hongxun.project.assets.iDevice.service.IIDeviceService;
import com.hongxun.project.assets.iLine.domain.ILine;
import com.hongxun.project.assets.iLine.service.IILineService;
import com.hongxun.project.assets.iMaterial.domain.IMaterial;
import com.hongxun.project.assets.iMaterial.service.IIMaterialService;
import com.hongxun.project.assets.iPicture.domain.IPicture;
import com.hongxun.project.assets.iPicture.service.IIPictureService;
import com.hongxun.project.assets.iPoint.domain.IPoint;
import com.hongxun.project.assets.iPoint.service.IIPointService;
import com.hongxun.project.assets.pDevice.service.IPDeviceService;
import com.hongxun.project.common.CommonController;
import com.lowagie.text.*;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.rtf.RtfWriter2;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.usermodel.HeaderFooter;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Header;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;

/**
 *  导出表格
 *
 * Created by john on 2019/4/19.
 */
@Controller
@RequestMapping("/assets/exportDetiail")
public class ExportDetiail extends BaseController {

    private static final Logger log = LoggerFactory.getLogger(CommonController.class);

    private String ROOT = RuoYiConfig.getProfile();

    @Autowired
    private IIPointService iPointService;
    @Autowired
    private IILineService iLineService;
    @Autowired
    private IPDeviceService pDeviceService;
    @Autowired
    private IIDeviceService iDeviceService;
    @Autowired
    private IIMaterialService iMaterialService;
    @Autowired
    private IBByqService bByqService;
    @Autowired
    private IIPictureService iPictureService;


    /**
     *  导出表格
     *
     * @param fileName
     * @param id
     * @param delete
     * @param response
     * @param request
     * @throws IOException
     */
    @GetMapping("common/download")
    public void fileDownload(String fileName, String id ,Boolean delete, HttpServletResponse response, HttpServletRequest request) throws IOException {

        List listAssets = extportAssets(id);
        ILine iLine = iLineService.selectILineById(id);
        List listCoint = exportLineAssets(id);
        String name = fileName.substring(fileName.indexOf("-")+1,fileName.length());

        //创建Excel
        HSSFWorkbook workbook = new HSSFWorkbook();
        if(name.equals("资产表")){
            workbook = genAssetsExcel(listAssets , null , fileName);
        }else {
            workbook = genLineAssetsExcel(id,listCoint,iLine,null , fileName);
        }

        try
        {
            if (!FileUtils.isValidFilename(fileName))
            {
                throw new Exception(StringUtils.format(" 文件名称({})非法，不允许下载。 ", fileName));
            }
            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
            String filePath = RuoYiConfig.getDownloadPath() + fileName;

            response.setCharacterEncoding("utf-8");
            response.setContentType("multipart/form-data");
            response.setHeader("Content-Disposition",
                    "attachment;fileName=" + new CommonController().setFileDownloadHeader(request, realFileName)+".xls");
            OutputStream out = response.getOutputStream();
            workbook.write(out);
            out.flush();
            out.close();
            if (delete)
            {
                FileUtils.deleteFile(filePath);
            }
        }
        catch (Exception e)
        {
            log.error("下载文件失败", e);
        }
    }


    public static Double add(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(v1.toString());
        BigDecimal b2 = new BigDecimal(v2.toString());
        return b1.add(b2).doubleValue();
    }

    private List<IMaterial> removeDuplicate(List<IMaterial> list) {
        LinkedHashSet<IMaterial> set = new LinkedHashSet<IMaterial>(list.size());
        set.addAll(list);
        list.clear();
        list.addAll(set);
        return list;
    }

    /**
     * 导出资产
     *
     * @param id
     * @return
     * @throws IOException
     */
    @PostMapping("Assets")
    @ResponseBody
    public List extportAssets(@RequestParam String id ) throws IOException {

        //  变压器ID -- 查询该变压器下的所有线路的资产

        List<Map<String , Object>> list = new ArrayList();
        BByq bByq = new BByq();
        bByq.setId(id);
        List<BByq> byqList = bByqService.selectBByqList(bByq);
        ILine iLines = new ILine();
        iLines.setByqId(id);
        List<ILine> ilist = iLineService.selectILineList(iLines);

        IPoint iPoint = new IPoint();
        iPoint.setByqId(id);
        List<IPoint> iPointList = iPointService.selectIPointList(iPoint);

        //  以电缆或者架空线的数量循环
        IDevice iDevices = new IDevice();
        iDevices.setByqId(id);
        List<IDevice> iDeviceLists = iDeviceService.getBigType(iDevices);

       /* for (IDevice iDeviceList : iDeviceLists) {
            if(iDeviceList.getBigType().equals("分支箱")){

            }else if(iDeviceList.getBigType().equals("低压配电柜")){

            }else if(iDeviceList.getBigType().equals("采集通信设备")){

            }else if(iDeviceList.getBigType().equals("电能表")){

            }else if(iDeviceList.getBigType().equals("计量表箱")){

            }else if(iDeviceList.getBigType().equals("低压电流互感器")){

            }
        }*/
        
        
        

        IMaterial iMaterial = new IMaterial();
        iMaterial.setByqId(id);
        List<IMaterial> iMaterialList22 = iMaterialService.getBigType(iMaterial);

       /* Double saw = 0D;
        for (IMaterial material : iMaterialList22) {
            String[] iw = material.getPointId().split(",");
            for (String s : iw) {

                IPoint iPoint1 = iPointService.selectIPointById(s);
                if(iPoint1.getType().equals("杆塔")){
                    saw += iPoint1.getSpan().doubleValue();
                }else if(iPoint1.getType().equals("表箱")){
                    saw += iPoint1.getInletLine().doubleValue();
                }
            }
            material.setNewCounts(saw);
        }*/

        List<IMaterial> iMaterialList = new ArrayList<>();
//        List<IMaterial> iMaterialList33 = new ArrayList<>();
        for (IMaterial material : iMaterialList22) {
            if(material.getBigType().equals("架空绝缘导线") || material.getBigType().equals("钢芯铝绞线") ||
                    material.getBigType().equals("0.4kV电缆") || material.getBigType().equals("交联电缆")){

                String[] iw = material.getPointId().split(",");
                Double saw = 0D;
                for (String s : iw) {

                    IPoint iPoint1 = iPointService.selectIPointById(s);
                    if(iPoint1.getType().equals("杆塔")){
                        saw += iPoint1.getSpan().doubleValue();
                    }else if(iPoint1.getType().equals("表箱")){
                        saw += iPoint1.getInletLine().doubleValue();
                    }
                }
                material.setNewCounts(saw);
                iMaterialList.add(material);

            }
        }
//        double ssp = 0D;
//        for (IMaterial material : iMaterialList) {
//            for (IMaterial iMaterial1 : iMaterialList) {
//                if(material.getName().equals(iMaterial1.getName())){
//                    iMaterialList33.add(iMaterial1);
//                }else{
//                    iMaterialList33.add(iMaterial1);
//                }
//            }
//        }

//        iMaterialList33.retainAll(iMaterialList22);
//        List<IMaterial> stringList = removeDuplicate(iMaterialList22);


        int ios = 0;
        for (int i = 0; i < iMaterialList.size(); i++) {
//            if(iMaterialList.get(i).getBigType().equals("架空绝缘导线") ||
//                    iMaterialList.get(i).getBigType().equals("钢芯铝绞线") ||
//                    iMaterialList.get(i).getBigType().equals("0.4kV电缆") ||
//                    iMaterialList.get(i).getBigType().equals("交联电缆")){
                String lingModleJK = "";                    //  架空线规格型号
                Double lingJK = 0D;                         //  架空线长度
                Double lingJK1 = 0D;                         //  架空线长度1
                Double lingJK2 = 0D;                         //  架空线长度2
                String lingModleDL = "";                    //  电缆线规格型号
                Double lingDL = 0D;                         //  电缆线长度
                Double lingDL1 = 0D;                         //  电缆线长度1
                Double lingDL2 = 0D;                         //  电缆线长度2
                Double v380 = 0D;                           //  380v线路长度
                Double v220 = 0D;                           //  220v线路长度
                Double lineCount = 0D;                      //  线路长度合计

                Integer poleHeight4 = 0;                    //  4米杆高基数
                Integer poleHeight6 = 0;                    //  6米杆高基数
                Integer poleHeight8 = 0;                    //  8米杆高基数
                Integer poleHeight10 = 0;                   //  10米杆高基数
                Integer poleHeight12 = 0;                   //  12米杆高基数
                Integer poleHeight15 = 0;                   //  15米杆高基数
                Integer poleHeight18 = 0;                   //  18米杆高基数

                Integer sumTotal = 0;                       //  杆高总和
                String poleShape = "";                      //  杆塔形状
                String manufacturer = "";                   //  生产厂家
                String comDate = "";                        //  投运日期

                //  单相户表(智能型、普通型)、单相表箱、三相户表(智能型、普通型)、三相表箱
                Integer oneSurfaceSmart = 0;                //  单相户表--智能型数量
                Integer oneSurfaceOrdinary = 0;             //  单相户表--普通型数量
                Integer oneBox = 0;                         //  单相表箱数量
                Integer threeSurfaceSmart = 0;              //  三相户表--智能型数量
                Integer threeSurfaceOrdinary = 0;           //  三相户表--智能型数量
                Integer threeBox = 0;                       //  三相表箱数量

                Integer concentrator = 0;                   //  集中器数量
                Integer mutualInductor = 0;                 //  互感器数量
                Integer lowBox = 0;                         //  低压电缆分支箱数量
                Integer lowCabinet = 0;                     //  成套低压配电柜数量

                Map<String, Object> objectMap = new HashMap<>();
                for (BByq byq : byqList) {
                    objectMap.put("area",byq.getName());
                    objectMap.put("lineName",byq.getLine10kvName());
                }

            /*String[] iw = iMaterialList.get(i).getPointId().split(",");
            for (String s : iw) {

                IPoint iPoint1 = iPointService.selectIPointById(s);
                saw += iPoint1.getSpan().doubleValue();
            }*/

            if (iMaterialList.get(i).getBigType().equals("架空绝缘导线")) {
                lingModleJK = iMaterialList.get(i).getName();
                lingJK += iMaterialList.get(i).getNewCounts();
            } else if(iMaterialList.get(i).getBigType().equals("钢芯铝绞线")){
                lingModleJK = iMaterialList.get(i).getName();
                lingJK += iMaterialList.get(i).getNewCounts();
            } else if(iMaterialList.get(i).getBigType().equals("0.4kV电缆")){
                lingModleDL = iMaterialList.get(i).getName();
                lingDL += iMaterialList.get(i).getNewCounts();
            } else if(iMaterialList.get(i).getBigType().equals("交联电缆")){
                lingModleDL = iMaterialList.get(i).getName();
                lingDL += iMaterialList.get(i).getNewCounts();
            }

                /*for (IPoint iPoints : iPointList) {

                    Map<String, Object> maps = new HashMap<>();

                    //  架空线路（规格，长度）
                    if (iPoints.getType().equals("杆塔") || iPoints.getType().equals("表箱")){
                        if (iMaterialList.get(i).getBigType().equals("架空绝缘导线") || iMaterialList.get(i).getBigType().equals("钢芯铝绞线")) {
                            lingModleJK = iMaterialList.get(i).getName();

                            if (iMaterialList.get(i).getBigType().equals("架空绝缘导线")) {
                                lingJK1 += iMaterialList.get(i).getNewCounts();
                            } else {
                                lingJK2 += iMaterialList.get(i).getNewCounts();
                            }

                            *//*if (iPoints.getId().equals(iMaterialList.get(i).getPointId())) {
                                if(iPoints.getSpan() != null){

                                    if (iMaterialList.get(i).getBigType().equals("架空绝缘导线")) {
//                                        lingJK1 += iPoints.getSpan().doubleValue();
                                        lingJK1 += iMaterialList.get(i).getNewCounts();
                                    } else {
//                                        lingJK2 += iPoints.getSpan().doubleValue();
                                        lingJK2 += iMaterialList.get(i).getNewCounts();
                                    }
                                    lingJK = lingJK1 + lingJK2;
                                }

                                if(iPoints.getSpan() == null){

                                    if(iMaterialList.get(i).getBigType().equals("架空绝缘导线")){
//                                        lingJK1 += iPoints.getInletLine().doubleValue();
                                        lingJK1 += iMaterialList.get(i).getNewCounts();
                                    }else{
//                                        lingJK2 += iPoints.getInletLine().doubleValue();
                                        lingJK2 += iMaterialList.get(i).getNewCounts();
                                    }
                                    lingJK = lingJK1 + lingJK2;
                                }

//                                lingJK = lingJK1 + lingJK2;
                            }*//*
                        }
                    }
                    //  电缆线路（规格，长度）
                    if (iPoints.getType().equals("杆塔") || iPoints.getType().equals("表箱")) {
                        if (iMaterialList.get(i).getBigType().equals("0.4kV电缆") || iMaterialList.get(i).getBigType().equals("交联电缆")) {
                            lingModleDL = iMaterialList.get(i).getName();

                            if (iMaterialList.get(i).getBigType().equals("0.4kV电缆")) {
                                lingDL1 += iMaterialList.get(i).getNewCounts();
                            } else {
                                lingDL2 += iMaterialList.get(i).getNewCounts();
                            }

                            *//*if (iPoints.getId().equals(iMaterialList.get(i).getPointId())) {
                                if(iPoints.getSpan() != null){
                                    if (iMaterialList.get(i).getBigType().equals("0.4kV电缆")) {
//                                        lingDL1 += iPoints.getSpan().doubleValue();
                                        lingDL1 += iMaterialList.get(i).getNewCounts();
                                    } else {
//                                        lingDL2 += iPoints.getSpan().doubleValue();
                                        lingDL2 += iMaterialList.get(i).getNewCounts();
                                    }
                                    lingDL = lingDL1 + lingDL2;
                                }

                                if(iPoints.getSpan() == null){
                                    if(iMaterialList.get(i).getBigType().equals("0.4kV电缆")){
//                                        lingDL1 += iPoints.getInletLine().doubleValue();
                                        lingDL1 += iMaterialList.get(i).getNewCounts();
                                    }else{
//                                        lingDL2 += iPoints.getInletLine().doubleValue();
                                        lingDL2 += iMaterialList.get(i).getNewCounts();
                                    }
                                    lingDL = lingDL1 + lingDL2;
                                }
//                                lingDL = lingDL1 + lingDL2;

                            }*//*
                        }
                    }
                }*/

                for (IPoint point : iPointList) {
//                    IMaterial iMaterial2 = new IMaterial();
//                    iMaterial2.setByqId(id);
//                    iMaterial2.setPointId(point.getId());
//                    List<IMaterial> iMaterialList2 = iMaterialService.selectIMaterialList(iMaterial2);
//                    for (IMaterial material : iMaterialList2) {
                        if(point.getVoltage() != null && ios==0){

                            if(point.getVoltage().equals("400v") && point.getType().equals("杆塔")){
                                v380 += point.getSpan().doubleValue();
                            }else if(point.getVoltage().equals("220v") && point.getType().equals("杆塔")){
                                v220 += point.getSpan().doubleValue();
                            }
                        }
//                    }

                }
                
                    /*for (ILine iLine : ilist) {
                        if(iLine.getVoltage().equals("400v")){
                            if (iLine.getTotalSpan() != null) {
                                v380 += iLine.getTotalSpan().doubleValue();
                            }
                        }

                        if(iLine.getVoltage().equals("220v")){
                            if (iLine.getTotalSpan() != null)
                                v220 += iLine.getTotalSpan().doubleValue();
                        }
                    }*/


                    //  线路长度合计
                if(ios==0){
                    lineCount = v380+v220;
//                    lineCount = add(lingDL,lingJK);
                }

//                    if(iLine.getLineType().equals("架空线")) {
//                        if(iLine.getOverSpan()!=null) {
//                            lingJK += iLine.getOverSpan().doubleValue();
//                        }
//                    }

                    //  电缆线路（规格，长度）
                    /*if (iLine.getRunCode() != null)
                        lingModleDL = iLine.getRunCode();

                    if(iLine.getLineType().equals("电缆线")) {
                        if(iLine.getOverSpan()!=null) {
                            lingDL += iLine.getOverSpan().doubleValue();
                        }
                    }*/

                    //  分属电压等级的线路长度(380v,220v)
                    /*if(iLine.getVoltage().equals("400v")){
                        if (iLine.getTotalSpan() != null) {
                            v380 += iLine.getTotalSpan().doubleValue();
                        }
                    }

                    if(iLine.getVoltage().equals("220v")){
                        if (iLine.getTotalSpan() != null)
                            v220 += iLine.getTotalSpan().doubleValue();
                    }*/

                    //  线路长度合计
//                    if(iLine.getTotalSpan() != null)
//                        lineCount += iLine.getTotalSpan().doubleValue();

                    //  杆塔型号各自多少杆(4,6,8,10,12,15,18)
//                    IPoint iPoint = new IPoint();
//                    iPoint.setLineId(id);
//                    List<IPoint> iPointList = iPointService.selectIPointList(iPoint);
                    if(ios==0){
                        for (IPoint point : iPointList) {
                            if(point.getType().equals("杆塔")){
                                if (point.getPoleHeight().equals("4米")){
                                    poleHeight4 = ++poleHeight4;
                                }else if (point.getPoleHeight().equals("6米")){
                                    poleHeight6 = ++poleHeight6;
                                }else if (point.getPoleHeight().equals("8米")){
                                    poleHeight8 = ++poleHeight8;
                                }else if (point.getPoleHeight().equals("10米")){
                                    poleHeight10 = ++poleHeight10;
                                }else if (point.getPoleHeight().equals("12米")){
                                    poleHeight12 = ++poleHeight12;
                                }else if (point.getPoleHeight().equals("15米")){
                                    poleHeight15 = ++poleHeight15;
                                }else if (point.getPoleHeight().equals("18米")){
                                    poleHeight18 = ++poleHeight18;
                                }
                            }
                        }
                    sumTotal = poleHeight4 + poleHeight6 + poleHeight8 + poleHeight10 + poleHeight12 + poleHeight15 + poleHeight18;
//                        Double ite1 = add(poleHeight4.doubleValue(),poleHeight6.doubleValue());
//                        Double ite2 = add(ite1,poleHeight8.doubleValue());
//                        Double ite3 = add(ite2,poleHeight10.doubleValue());
//                        Double ite4 = add(ite3,poleHeight12.doubleValue());
//                        Double ite5 = add(ite4,poleHeight15.doubleValue());
//                        sumTotal = add(ite5,poleHeight18.doubleValue());

//                        lineCount = add(lingDL,lingJK);
                    }

                    //  杆基总和

                    //  杆塔形状、生产厂家、投运日期

                    //  单相户表(智能型、普通型)、单相表箱、三相户表(智能型、普通型)、三相表箱
//                    IDevice iDevice = new IDevice();
//                    iDevice.setLineId(iLine.getId());
//                    List<IDevice> iDeviceList = iDeviceService.selectIDeviceList(iDevice);
                    if(ios==0){

                        for (IDevice device : iDeviceLists) {


                            if(device.getBigType().equals("分支箱")){
                                if(device.getName().indexOf("分支箱") != -1){
                                    lowBox = ++lowBox;
                                }
                            }else if(device.getBigType().equals("低压配电柜")){
                                if(device.getName().indexOf("低压配电柜") != -1){
                                    lowCabinet = ++lowCabinet;
                                }
                            }else if(device.getBigType().equals("采集通信设备")){
                                if(device.getName().indexOf("集中器") != -1){
                                    concentrator = ++concentrator;
                                }
                            }else if(device.getBigType().equals("电能表")){
                                if(device.getName().indexOf("单相") != -1){
                                   if(device.getName().indexOf("智能") != -1){
                                       oneSurfaceSmart = ++oneSurfaceSmart;
                                   }else if(device.getName().indexOf("智能") == -1){
                                       oneSurfaceOrdinary = ++oneSurfaceOrdinary;
                                   }
                                } else if(device.getName().indexOf("三相") != -1){
                                    if(device.getName().indexOf("智能") != -1){
                                        threeSurfaceSmart = ++threeSurfaceSmart;
                                    }else if(device.getName().indexOf("智能") == -1){
                                        threeSurfaceOrdinary = ++threeSurfaceOrdinary;
                                    }
                                }
                            }else if(device.getBigType().equals("计量表箱")){
                                if(device.getName().indexOf("单相") != -1){
                                    oneBox = ++oneBox;
                                }else if(device.getName().indexOf("三相") != -1){
                                    threeBox = ++threeBox;
                                }
                            }else if(device.getBigType().equals("低压电流互感器")){
                                if(device.getName().indexOf("低压电流互感器") != -1){
                                    mutualInductor = ++mutualInductor;
                                }
                            }


                            //  单相户表(智能型、普通型)
                           /* if (device.getBigType().equals("电能表")){
//                                if (device.getName().equals("智能")){
                                if (device.getName().indexOf("智能") != -1){
                                    oneSurfaceSmart = ++oneSurfaceSmart;
                                }else{
                                    oneSurfaceOrdinary = ++oneSurfaceOrdinary;
                                }
                            }
                            //  单相表箱
                            if (device.getBigType().equals("计量表箱") && device.getMidType().equals("单相计量表箱")){
                                oneBox = ++oneBox;
                            }

                            //  三相户表(智能型、普通型)
                            if (device.getBigType().equals("电能表") && !device.getMidType().equals("单相费控")){
//                                if (device.getName().equals("智能")){
                                if (device.getName().indexOf("智能") != -1){
                                    threeSurfaceSmart = ++threeSurfaceSmart;
                                }else{
                                    threeSurfaceOrdinary = ++threeSurfaceOrdinary;
                                }
                            }

                            //  三相表箱
                            if (device.getBigType().equals("计量表箱") && device.getMidType().equals("三相计量表箱")){
                                threeBox = ++threeBox;
                            }*/
                        }

                        //  集中器、互感器、低压电缆分支箱、成套低压配电柜、备注

                        /*for (IDevice device : iDeviceLists) {
                            //  集中器
                            if (device.getBigType().equals("采集终端") && device.getMidType().equals("集中抄表终端") || device.getBigType().equals("采集通信设备")){
                                concentrator = ++concentrator;
                            }
                            //  互感器
                            if (device.getBigType().equals("低压电流互感器") ){
                                mutualInductor = ++mutualInductor;
                            }
                            //  低压电缆分支箱
                            if (device.getBigType().equals("分支箱") ){
                                lowBox = ++lowBox;
                            }
                            //  成套低压配电柜
                            if (device.getBigType().equals("低压配电柜") ){
                                lowCabinet = ++lowCabinet;
                            }
                        }*/
                    }

//                }


                objectMap.put("lingModleJK",lingModleJK);
                if(lingJK !=0)objectMap.put("lingJK",new BigDecimal(lingJK/1000).setScale(2,BigDecimal.ROUND_HALF_UP));else objectMap.put("lingJK","");
                objectMap.put("lingModleDL",lingModleDL);
                if(lingDL !=0)objectMap.put("lingDL",new BigDecimal(lingDL/1000).setScale(2,BigDecimal.ROUND_HALF_UP));else objectMap.put("lingDL","");
                if(v380 !=0)objectMap.put("v380",new BigDecimal(v380/1000).setScale(2,BigDecimal.ROUND_HALF_UP));else objectMap.put("v380","");
                if(v220 !=0)objectMap.put("v220",new BigDecimal(v220/1000).setScale(2,BigDecimal.ROUND_HALF_UP));else objectMap.put("v220","");
                if(lineCount !=0)objectMap.put("lineCount",new BigDecimal(lineCount/1000).setScale(2,BigDecimal.ROUND_HALF_UP));else objectMap.put("lineCount","");

                if(poleHeight4 !=0)objectMap.put("poleHeight4",poleHeight4);else objectMap.put("poleHeight4","");
                if(poleHeight6 !=0)objectMap.put("poleHeight6",poleHeight6);else objectMap.put("poleHeight6","");
                if(poleHeight8 !=0)objectMap.put("poleHeight8",poleHeight8);else objectMap.put("poleHeight8","");
                if(poleHeight10 !=0)objectMap.put("poleHeight10",poleHeight10);else objectMap.put("poleHeight10","");
                if(poleHeight12 !=0)objectMap.put("poleHeight12",poleHeight12);else objectMap.put("poleHeight12","");
                if(poleHeight15 !=0)objectMap.put("poleHeight15",poleHeight15);else objectMap.put("poleHeight15","");
                if(poleHeight18 !=0)objectMap.put("poleHeight18",poleHeight18);else objectMap.put("poleHeight18","");

                if(sumTotal !=0)objectMap.put("sumTotal",sumTotal);else objectMap.put("sumTotal","");
                objectMap.put("poleShape","");
                if(manufacturer !="")objectMap.put("manufacturer","");else objectMap.put("manufacturer","");
                if(comDate !="")objectMap.put("comDate","");else objectMap.put("comDate","");

                if(oneSurfaceSmart !=0)objectMap.put("oneSurfaceSmart",oneSurfaceSmart);else objectMap.put("oneSurfaceSmart","");
                if(oneSurfaceOrdinary !=0)objectMap.put("oneSurfaceOrdinary",oneSurfaceOrdinary);else objectMap.put("oneSurfaceOrdinary","");
                if(oneBox !=0)objectMap.put("oneBox",oneBox);else objectMap.put("oneBox","");
                if(threeSurfaceSmart !=0)objectMap.put("threeSurfaceSmart",threeSurfaceSmart);else objectMap.put("threeSurfaceSmart","");
                if(threeSurfaceOrdinary !=0)objectMap.put("threeSurfaceOrdinary",threeSurfaceOrdinary);else objectMap.put("threeSurfaceOrdinary","");
                if(threeBox !=0)objectMap.put("threeBox",threeBox);else objectMap.put("threeBox","");

                if(concentrator !=0)objectMap.put("concentrator",concentrator);else objectMap.put("concentrator","");
                if(mutualInductor !=0)objectMap.put("mutualInductor",mutualInductor);else objectMap.put("mutualInductor","");
                if(lowBox !=0)objectMap.put("lowBox",lowBox);else objectMap.put("lowBox","");
                if(lowCabinet !=0)objectMap.put("lowCabinet",lowCabinet);else objectMap.put("lowCabinet","");
                objectMap.put("remarks","");

                list.add(objectMap);
                ++ios;
//            }
        }

        return list;
    }


    /**
     *  导出台账
     *
     * @param
     * @param
     * @return
     * @throws IOException
     */
    @PostMapping("LineAssets")
    @ResponseBody
    public List exportLineAssets(@RequestParam String id ) throws IOException {

        //  表格字段：设备名称，单位，数量，设备型号，生产厂家，出厂年月，投运日期，运维部门，运维班组，出厂编号，备注
        List list = new ArrayList();
        //  变压器ID
        BByq bByq = bByqService.selectBByqById(id);
//        Map<String , Object> maps = new HashMap<>();
//        List iDevices = new ArrayList<>();
//        iDevices.add(bByq.getName());        //  台区变压器
        list.add(bByq);
        ILine iLine = new ILine();
        iLine.setByqId(id);
        List<ILine> iLineList = iLineService.selectILineList(iLine);
        //  统计格式：10kv支线(没有支线则可以不填)，台区变压器，低压配电柜，集中器，低压配电线路
        for (ILine line : iLineList) {
//            Map<String , Object> map = new HashMap<>();
            //  查询归档后的设备材料表
            IDevice iDevice = new IDevice();
            iDevice.setByqId(id);
            iDevice.setLineId(line.getId());
            List<IDevice> iDeviceList = iDeviceService.selectIDeviceList(iDevice);
            if(iDeviceList != null){
                for (IDevice device : iDeviceList) {
                    if (device.getBigType().equals("低压配电柜") || device.getMidType().equals("集中器")){
//                        iDevices.add(device);
                        list.add(device);
                    }
                }
            }
            list.add(line);
        }


        return list;
    }


    /**
     * 创建线路资产管理统计Excel
     *
     * @param
     * @param
     * @param
     * @param
     * @param
     */
    public HSSFWorkbook genAssetsExcel(List list , HSSFWorkbook workbook , String fileName) {

        if(workbook == null){
            workbook = new HSSFWorkbook();
        }

        //创建表单
        HSSFSheet sheet = genSheet(workbook,fileName);

        //创建表单样式
        //创建标题样式
        HSSFCellStyle titleStyle = genTitleStyle(workbook);
        //创建文本样式
        HSSFCellStyle contextStyle = genContextStyle(workbook);

        //设置标题位置
        sheet.addMergedRegion(new CellRangeAddress(
                0, //first row
                0, //last row
                0, //first column
                32 //last column
        ));

        //创建第一行，为标题，index从0开始
        HSSFRow row = sheet.createRow(0);
        row.setHeightInPoints(30);  // 行高
        HSSFCell cell;
        cell = row.createCell(0);//创建一列
        cell.setCellValue(fileName);//标题
        cell.setCellStyle(titleStyle);//设置标题样式

        //创建第二行
        row = sheet.createRow(1);
        row.setHeightInPoints(27);  //  行高

        cell = row.createCell(0);//创建第二行第一列	序号列
        cell.setCellValue("序号");//第二行第一列内容
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra0 = new CellRangeAddress(1,3,0,0);
        sheet.addMergedRegion(cra0);
        setRegionStyle(BorderStyle.THIN,cra0,sheet);
        sheet.setColumnWidth(0,1500);

        cell = row.createCell(1);//2 row 1 column
        cell.setCellValue("*供电所");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra1 = new CellRangeAddress(1,3,1,1);
        sheet.addMergedRegion(cra1);
        setRegionStyle(BorderStyle.THIN,cra1,sheet);
        sheet.setColumnWidth(1,2500);

        cell = row.createCell(2);//2 row 1 column
        cell.setCellValue("*台区名称");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra2 = new CellRangeAddress(1,3,2,2);
        sheet.addMergedRegion(cra2);
        setRegionStyle(BorderStyle.THIN,cra2,sheet);
        sheet.setColumnWidth(2,2500);

        cell = row.createCell(3);//2 row 2 column
        cell.setCellValue("*所属馈路");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra3 = new CellRangeAddress(1,3,3,3);
        sheet.addMergedRegion(cra3);
        setRegionStyle(BorderStyle.THIN,cra3,sheet);
        sheet.setColumnWidth(3,3500);

        cell = row.createCell(4);//2 row 3 column
        cell.setCellValue("*低压线路长度（KM）");
        cell.setCellStyle(contextStyle);
        //  合并单元格（起始行，终止行，起始列，终止列）
        CellRangeAddress cra4 = new CellRangeAddress(1,1,4,9);
        sheet.addMergedRegion(cra4);
        setRegionStyle(BorderStyle.THIN,cra4,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(4,3500);

        cell = row.createCell(10);//2 row 4 column
        cell.setCellValue("*线路长度合计(KM)");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra10 = new CellRangeAddress(1,3,10,10);
        sheet.addMergedRegion(cra10);
        setRegionStyle(BorderStyle.THIN,cra10,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(10,3500);

        cell = row.createCell(11);//2 row 5 column
        cell.setCellValue("杆基型号(4米)");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra11 = new CellRangeAddress(1,3,11,11);
        sheet.addMergedRegion(cra11);
        setRegionStyle(BorderStyle.THIN,cra11,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(11,2500);

        cell = row.createCell(12);//2 row 6 column
        cell.setCellValue("杆基型号(6米)");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra12 = new CellRangeAddress(1,3,12,12);
        sheet.addMergedRegion(cra12);
        setRegionStyle(BorderStyle.THIN,cra12,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(12,2500);

        cell = row.createCell(13);//2 row 7 column
        cell.setCellValue("杆基型号(8米)");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra13 = new CellRangeAddress(1,3,13,13);
        sheet.addMergedRegion(cra13);
        setRegionStyle(BorderStyle.THIN,cra13,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(13,2500);

        cell = row.createCell(14);//2 row 8 column
        cell.setCellValue("杆基型号(10米)");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra14 = new CellRangeAddress(1,3,14,14);
        sheet.addMergedRegion(cra14);
        setRegionStyle(BorderStyle.THIN,cra14,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(14,2500);

        cell = row.createCell(15);//2 row 9 column
        cell.setCellValue("杆基型号(12米)");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra15 = new CellRangeAddress(1,3,15,15);
        sheet.addMergedRegion(cra15);
        setRegionStyle(BorderStyle.THIN,cra15,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(15,2500);

        cell = row.createCell(16);//2 row 10 column
        cell.setCellValue("杆基型号(15米)");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra16 = new CellRangeAddress(1,3,16,16);
        sheet.addMergedRegion(cra16);
        setRegionStyle(BorderStyle.THIN,cra16,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(16,2500);

        cell = row.createCell(17);//2 row 11 column
        cell.setCellValue("杆基型号(18米)");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra17 = new CellRangeAddress(1,3,17,17);
        sheet.addMergedRegion(cra17);
        setRegionStyle(BorderStyle.THIN,cra17,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(17,2500);

        cell = row.createCell(18);//2 row 12 column
        cell.setCellValue("杆基总和");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra18 = new CellRangeAddress(1,3,18,18);
        sheet.addMergedRegion(cra18);
        setRegionStyle(BorderStyle.THIN,cra18,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(18,2500);

        cell = row.createCell(19);//2 row 13 column
        cell.setCellValue("杆塔形状");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra19 = new CellRangeAddress(1,3,19,19);
        sheet.addMergedRegion(cra19);
        setRegionStyle(BorderStyle.THIN,cra19,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(19,2500);

        cell = row.createCell(20);//2 row 13 column
        cell.setCellValue("生产厂家");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra20 = new CellRangeAddress(1,3,20,20);
        sheet.addMergedRegion(cra20);
        setRegionStyle(BorderStyle.THIN,cra20,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(20,2500);

        cell = row.createCell(21);//2 row 13 column
        cell.setCellValue("*投运日期");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra21 = new CellRangeAddress(1,3,21,21);
        sheet.addMergedRegion(cra21);
        setRegionStyle(BorderStyle.THIN,cra21,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(21,2500);

        cell = row.createCell(22);//2 row 13 column
        cell.setCellValue("单相户表（只）");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra22 = new CellRangeAddress(1,1,22,23);
        sheet.addMergedRegion(cra22);
        setRegionStyle(BorderStyle.THIN,cra22,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(22,2500);

        cell = row.createCell(24);//2 row 13 column
        cell.setCellValue("单相表箱（个）");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra24 = new CellRangeAddress(1,3,24,24);
        sheet.addMergedRegion(cra24);
        setRegionStyle(BorderStyle.THIN,cra24,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(24,2500);

        cell = row.createCell(25);//2 row 13 column
        cell.setCellValue("三相用户表计（只）");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra25 = new CellRangeAddress(1,1,25,26);
        sheet.addMergedRegion(cra25);
        setRegionStyle(BorderStyle.THIN,cra25,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(25,2500);

        cell = row.createCell(27);//2 row 13 column
        cell.setCellValue("三相表箱（个）");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra27 = new CellRangeAddress(1,3,27,27);
        sheet.addMergedRegion(cra27);
        setRegionStyle(BorderStyle.THIN,cra27,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(27,2500);

        cell = row.createCell(28);//2 row 13 column
        cell.setCellValue("*集中器（个）");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra28 = new CellRangeAddress(1,3,28,28);
        sheet.addMergedRegion(cra28);
        setRegionStyle(BorderStyle.THIN,cra28,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(28,2500);

        cell = row.createCell(29);//2 row 13 column
        cell.setCellValue("互感器（只）台区内所有安装");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra29 = new CellRangeAddress(1,3,29,29);
        sheet.addMergedRegion(cra29);
        setRegionStyle(BorderStyle.THIN,cra29,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(29,2500);

        cell = row.createCell(30);//2 row 13 column
        cell.setCellValue("*低压电缆分支箱（个）");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra30 = new CellRangeAddress(1,3,30,30);
        sheet.addMergedRegion(cra30);
        setRegionStyle(BorderStyle.THIN,cra30,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(30,2500);

        cell = row.createCell(31);//2 row 13 column
        cell.setCellValue("*成套低压配电柜（台）");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra31 = new CellRangeAddress(1,3,31,31);
        sheet.addMergedRegion(cra31);
        setRegionStyle(BorderStyle.THIN,cra31,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(31,2500);

        cell = row.createCell(32);//2 row 13 column
        cell.setCellValue("备注");
        cell.setCellStyle(contextStyle);
        CellRangeAddress cra32 = new CellRangeAddress(1,3,32,32);
        sheet.addMergedRegion(cra32);
        setRegionStyle(BorderStyle.THIN,cra32,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(32,2500);


        //创建第三行
        row = sheet.createRow(2);
        row.setHeightInPoints(20);  //  行高

        cell = row.createCell(0);//创建第二行第一列	序号列
        cell.setCellStyle(contextStyle);//设置样式
        cell = row.createCell(1);//2 row 1 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(2);//2 row 1 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(3);//2 row 2 column
        cell.setCellStyle(contextStyle);

        cell = row.createCell(4);//创建第三行第一列	序号列
        cell.setCellValue("*架空线路");
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra5 = new CellRangeAddress(2,2,4,5);
        sheet.addMergedRegion(cra5);
        setRegionStyle(BorderStyle.THIN,cra5,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(4,1500);

        cell = row.createCell(6);//创建第三行第二列
        cell.setCellValue("*电缆线路");
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra6 = new CellRangeAddress(2,2,6,7);
        sheet.addMergedRegion(cra6);
        setRegionStyle(BorderStyle.THIN,cra6,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(6,1500);

        cell = row.createCell(8);//创建第三行第一列	序号列
        cell.setCellValue("*380v");
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra8 = new CellRangeAddress(2,3,8,8);
        sheet.addMergedRegion(cra8);
        setRegionStyle(BorderStyle.THIN,cra8,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(8,1500);

        cell = row.createCell(9);//创建第三行第二列
        cell.setCellValue("*220v");
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra9 = new CellRangeAddress(2,3,9,9);
        sheet.addMergedRegion(cra9);
        setRegionStyle(BorderStyle.THIN,cra9,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(9,1500);
        cell = row.createCell(10);//2 row 4 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(11);//2 row 5 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(12);//2 row 6 column
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(12,2500);
        cell = row.createCell(13);//2 row 7 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(14);//2 row 8 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(15);//2 row 9 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(16);//2 row 10 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(17);//2 row 11 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(18);//2 row 12 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(19);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(20);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(21);//2 row 13 column
        cell.setCellStyle(contextStyle);

        cell = row.createCell(22);//创建第三行第二列	序号列
        cell.setCellValue("智能型(只)");
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra221 = new CellRangeAddress(2,3,22,22);
        sheet.addMergedRegion(cra221);
        setRegionStyle(BorderStyle.THIN,cra221,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(22,2000);

        cell = row.createCell(23);//创建第三行第二列	序号列
        cell.setCellValue("普通型(只)");
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra23 = new CellRangeAddress(2,3,23,23);
        sheet.addMergedRegion(cra23);
        setRegionStyle(BorderStyle.THIN,cra23,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(23,2000);
        cell = row.createCell(24);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(25);//创建第三行第二列	序号列
        cell.setCellValue("智能型(只)");
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra251 = new CellRangeAddress(2,3,25,25);
        sheet.addMergedRegion(cra251);
        setRegionStyle(BorderStyle.THIN,cra251,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(25,2000);

        cell = row.createCell(26);//创建第三行第二列	序号列
        cell.setCellValue("普通型(只)");
        cell.setCellStyle(contextStyle);//设置样式
        CellRangeAddress cra26 = new CellRangeAddress(2,3,26,26);
        sheet.addMergedRegion(cra26);
        setRegionStyle(BorderStyle.THIN,cra26,sheet);    //  合并后的单元格边框设置
        sheet.setColumnWidth(26,2000);
        cell = row.createCell(27);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(28);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(29);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(30);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(31);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(32);//2 row 13 column
        cell.setCellStyle(contextStyle);


        //创建第四行
        row = sheet.createRow(3);
        row.setHeightInPoints(20);  //  行高

        cell = row.createCell(0);//创建第二行第一列	序号列
        cell.setCellStyle(contextStyle);//设置样式
        sheet.setColumnWidth(0,1500);
        cell = row.createCell(1);//2 row 1 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(2);//2 row 1 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(3);//2 row 2 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(4);//创建第四行第一列
        cell.setCellValue("规格");
        cell.setCellStyle(contextStyle);//设置样式
        sheet.setColumnWidth(4,1500);
        cell = row.createCell(5);//创建第四行第一列
        cell.setCellValue("数量");
        cell.setCellStyle(contextStyle);//设置样式
        sheet.setColumnWidth(5,1500);
        cell = row.createCell(6);//创建第四行第一列
        cell.setCellValue("规格");
        cell.setCellStyle(contextStyle);//设置样式
        sheet.setColumnWidth(6,1500);
        cell = row.createCell(7);//创建第四行第一列
        cell.setCellValue("数量");
        cell.setCellStyle(contextStyle);//设置样式
        sheet.setColumnWidth(7,1500);
        cell = row.createCell(8);//创建第三行第一列	序号列
        cell.setCellStyle(contextStyle);//设置样式
        cell = row.createCell(9);//创建第三行第二列
        cell.setCellStyle(contextStyle);//设置样式
        cell = row.createCell(10);//2 row 4 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(11);//2 row 5 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(12);//2 row 6 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(13);//2 row 7 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(14);//2 row 8 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(15);//2 row 9 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(16);//2 row 10 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(17);//2 row 11 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(18);//2 row 12 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(19);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(20);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(21);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(22);//创建第三行第二列	序号列
        cell.setCellStyle(contextStyle);//设置样式
        cell = row.createCell(23);//创建第三行第二列	序号列
        cell.setCellStyle(contextStyle);//设置样式
        cell = row.createCell(24);//创建第三行第二列	序号列
        cell.setCellStyle(contextStyle);//设置样式
        cell = row.createCell(25);//创建第三行第二列	序号列
        cell.setCellStyle(contextStyle);//设置样式
        cell = row.createCell(26);//创建第三行第二列	序号列
        cell.setCellStyle(contextStyle);//设置样式
        cell = row.createCell(27);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(28);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(29);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(30);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(31);//2 row 13 column
        cell.setCellStyle(contextStyle);
        cell = row.createCell(32);//2 row 13 column
        cell.setCellStyle(contextStyle);



        //  添加值
        for (int i = 0; i < list.size(); i++) {

            row = sheet.createRow(i+4);//创建第五行
            row.setHeightInPoints(25);  // 行高
            Map map = (Map) list.get(i);


            cell=row.createCell(0);//创建第三行第一列	//	序号列
            cell.setCellValue(i+1);//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(1);//创建第三行第一列	//	供电所
            cell.setCellValue("供电所");//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(2);//创建第三行第一列	//	台区
            cell.setCellValue(map.get("area").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(3);//创建第三行第一列	//	所属线路
            cell.setCellValue(map.get("lineName").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(4);//创建第三行第一列	//	架空线路--规格
            cell.setCellValue(map.get("lingModleJK").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(5);//创建第三行第一列	//	架空线路--数量
            cell.setCellValue(map.get("lingJK").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(6);//创建第三行第一列	//	电缆线路--规格
            cell.setCellValue(map.get("lingModleDL").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(7);//创建第三行第一列	//	电缆线路--数量
            cell.setCellValue(map.get("lingDL").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(8);//创建第三行第一列	//	380v
            cell.setCellValue(map.get("v380").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(9);//创建第三行第一列	//	220v
            cell.setCellValue(map.get("v220").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(10);//创建第三行第一列	//	线路合计(KM)
            cell.setCellValue(map.get("lineCount").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(11);//创建第三行第一列	//	杆塔型号(4米)
            cell.setCellValue(map.get("poleHeight4").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(12);//创建第三行第一列	//	杆塔型号(6米)
            cell.setCellValue(map.get("poleHeight6").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(13);//创建第三行第一列	//	杆塔型号(8米)
            cell.setCellValue(map.get("poleHeight8").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(14);//创建第三行第一列	//	杆塔型号(10米)
            cell.setCellValue(map.get("poleHeight10").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(15);//创建第三行第一列	//	杆塔型号(12米)
            cell.setCellValue(map.get("poleHeight12").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(16);//创建第三行第一列	//	杆塔型号(15米)
            cell.setCellValue(map.get("poleHeight15").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(17);//创建第三行第一列	//	杆塔型号(18米)
            cell.setCellValue(map.get("poleHeight18").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(18);//创建第三行第一列	//	杆高总和
            cell.setCellValue(map.get("sumTotal").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(19);//创建第三行第一列	//	杆塔形状
            cell.setCellValue(map.get("poleShape").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(20);//创建第三行第一列	//	生产厂家
            cell.setCellValue(map.get("manufacturer").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(21);//创建第三行第一列	//	投运日期
            cell.setCellValue(map.get("comDate").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(22);//创建第三行第一列	//	单相户表--智能型
            cell.setCellValue(map.get("oneSurfaceSmart").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(23);//创建第三行第一列	//	单相户表--普通型
            cell.setCellValue(map.get("oneSurfaceOrdinary").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(24);//创建第三行第一列	//	单相表箱
            cell.setCellValue(map.get("oneBox").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(25);//创建第三行第一列	//	三相户表--智能型
            cell.setCellValue(map.get("threeSurfaceSmart").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(26);//创建第三行第一列	//	三相户表--普通型
            cell.setCellValue(map.get("threeSurfaceOrdinary").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(27);//创建第三行第一列	//	三相表箱
            cell.setCellValue(map.get("threeBox").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(28);//创建第三行第一列	//	集中器
            cell.setCellValue(map.get("concentrator").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(29);//创建第三行第一列	//	互感器
            cell.setCellValue(map.get("mutualInductor").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(30);//创建第三行第一列	//	低压电缆分支箱
            cell.setCellValue(map.get("lowBox").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(31);//创建第三行第一列	//	成套低压配电柜
            cell.setCellValue(map.get("lowCabinet").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(32);//创建第三行第一列	//	备注
            cell.setCellValue(map.get("remarks").toString());//第三行第一列的值
            cell.setCellStyle(contextStyle);//设置样式
        }

        return workbook;
    }


    /**
     * 创建线路资产台账Excel
     *
     * @param
     * @param
     * @param
     * @param
     * @param
     */
    public HSSFWorkbook genLineAssetsExcel(String id , List list , ILine iLine , HSSFWorkbook workbook , String fileName) {

        if(workbook == null){
            workbook = new HSSFWorkbook();
        }

        //创建表单
        HSSFSheet sheet = genSheet(workbook,fileName);

        //创建表单样式
        //创建标题样式
        HSSFCellStyle titleStyle = genTitleStyle(workbook);
        //创建文本样式
        HSSFCellStyle contextStyle = genContextStyle(workbook);

        //根据Excel列名长度，指定列名宽度  Excel总共13列
        //设置标题位置
        sheet.addMergedRegion(new CellRangeAddress(
                0, //first row
                0, //last row
                0, //first column
                10 //last column
        ));

        HSSFRow row = sheet.createRow(0);//创建第一行，为标题，index从0开始
        row.setHeightInPoints(30);  // 行高
        HSSFCell cell;
        cell = row.createCell(0);//创建一列
        cell.setCellValue(fileName);//标题
        cell.setCellStyle(titleStyle);//设置标题样式


        row = sheet.createRow(1);//创建第二行
        row.setHeightInPoints(20);  //  行高
//        cell = row.createCell(0);//创建第二行第一列	序号列
//        cell.setCellValue("序号");//第二行第一列内容
//        cell.setCellStyle(contextStyle);//设置样式
//        sheet.setColumnWidth(0,1500);

        cell = row.createCell(0);//2 row 1 column
        cell.setCellValue("*设备名称");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(0,3000);

        cell = row.createCell(1);//2 row 1 column
        cell.setCellValue("*计量单位");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(1,2500);

        cell = row.createCell(2);//2 row 2 column
        cell.setCellValue("*数量");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(2,1500);

        cell = row.createCell(3);//2 row 4 column
        cell.setCellValue("*生产厂家");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(3,3500);

        cell = row.createCell(4);//2 row 5 column
        cell.setCellValue("*线路(设备)型号");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(4,3500);

        cell = row.createCell(5);//2 row 6 column
        cell.setCellValue("*出厂年月");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(5,3000);

        cell = row.createCell(6);//2 row 7 column
        cell.setCellValue("*投运日期");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(6,3000);

        cell = row.createCell(7);//2 row 8 column
        cell.setCellValue("*运维部门");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(7,3500);

        cell = row.createCell(8);//2 row 9 column
        cell.setCellValue("*运维(保管)班组");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(8,3500);

        cell = row.createCell(9);//2 row 10 column
        cell.setCellValue("出厂编号");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(9,3000);

        cell = row.createCell(10);//2 row 11 column
        cell.setCellValue("备注");
        cell.setCellStyle(contextStyle);
        sheet.setColumnWidth(10,2500);


        //  变压器、配电柜、集中器、低压线路
        BByq bByq = new BByq();
        bByq.setId(id);
        List<BByq> bByqList = bByqService.selectBByqList(bByq);
        for (int i = 0; i < bByqList.size(); i++) {

            row=sheet.createRow(i+2);//创建第三行
            row.setHeightInPoints(25);  // 行高

//            cell=row.createCell(0);//创建第三行第一列	//	序号列
//            cell.setCellValue(i+1);//第三行第一列的值
//            cell.setCellStyle(contextStyle);//设置样式

            cell=row.createCell(0);//3 row 1 column
            cell.setCellValue(bByqList.get(i).getName());	//	设备名称
            cell.setCellStyle(contextStyle);
            cell=row.createCell(1);//3 row 1 column
            cell.setCellValue("台");	//	计量单位
            cell.setCellStyle(contextStyle);
            cell=row.createCell(2);//3 row 2 column
            cell.setCellValue(bByqList.size());	//	数量
            cell.setCellStyle(contextStyle);
            cell=row.createCell(3);//3 row 3 column
            if (bByqList.get(i).getFactory() == null)
                cell.setCellValue("");	//	生产厂家
            else
                cell.setCellValue(bByqList.get(i).getFactory());	//	生产厂家
            cell.setCellStyle(contextStyle);
            cell=row.createCell(4);//3 row 4 column
            if (bByqList.get(i).getModel() == null)
                cell.setCellValue("");	//	设备型号
            else
                cell.setCellValue(bByqList.get(i).getModel());	//	设备型号
            cell.setCellStyle(contextStyle);
            cell=row.createCell(5);//3 row 5 column
            cell.setCellValue("");	//	出厂年月
            cell.setCellStyle(contextStyle);
            cell=row.createCell(6);//3 row 6 column
            if (bByqList.get(i).getRunDate() ==null)
                cell.setCellValue("");	//	投运日期
            else
                cell.setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(bByqList.get(i).getRunDate()));	//	投运日期
            cell.setCellStyle(contextStyle);
            cell=row.createCell(7);//3 row 7 column
            cell.setCellValue("");	//	运维部门
            cell.setCellStyle(contextStyle);
            cell=row.createCell(8);//3 row 8 column
            cell.setCellValue("");	//	运维班组
            cell.setCellStyle(contextStyle);
            cell=row.createCell(9);//3 row 9 column
            cell.setCellValue("");	//	出厂编号
            cell.setCellStyle(contextStyle);

            cell=row.createCell(10);//3 row 11 column
            cell.setCellValue("");	//	备注
            cell.setCellStyle(contextStyle);
        }

        //  配电柜、集中器
        IDevice iDevice = new IDevice();
        iDevice.setByqId(id);
        List<IDevice> iDeviceList = iDeviceService.selectIDeviceList(iDevice);
//        device.getBigType().equals("低压配电柜") || device.getMidType().equals("集中器")
        List<IDevice> iDeviceList1 = new ArrayList<>();
        for (IDevice device : iDeviceList) {
            if(device.getBigType().equals("低压配电柜") || device.getBigType().equals("采集终端")){
                iDeviceList1.add(device);
            }
        }
        for (int i = 0; i < iDeviceList1.size(); i++) {

            row=sheet.createRow(i+3);//创建第三行
            row.setHeightInPoints(25);  // 行高

            cell=row.createCell(0);//3 row 1 column
            if(iDeviceList1.get(i).getBigType().equals("低压配电柜")){
                cell.setCellValue(iDeviceList1.get(i).getBigType());	//	设备名称
            }else if(iDeviceList1.get(i).getBigType().equals("采集终端")){
                cell.setCellValue(iDeviceList1.get(i).getBigType());	//	设备名称
            }
            cell.setCellStyle(contextStyle);
            cell=row.createCell(1);//3 row 1 column
            cell.setCellValue("台");	//	计量单位
            cell.setCellStyle(contextStyle);
            cell=row.createCell(2);//3 row 2 column
            cell.setCellValue(1);	//	数量
            cell.setCellStyle(contextStyle);
            cell=row.createCell(3);//3 row 3 column
            cell.setCellValue("");	//	生产厂家
            cell.setCellStyle(contextStyle);
            cell=row.createCell(4);//3 row 4 column
            if (iDeviceList1.get(i).getName() == null)
                cell.setCellValue("");	//	设备型号
            else
                cell.setCellValue(iDeviceList1.get(i).getName());	//	设备型号
            cell.setCellStyle(contextStyle);
            cell=row.createCell(5);//3 row 5 column
            cell.setCellValue("");	//	出厂年月
            cell.setCellStyle(contextStyle);
            cell=row.createCell(6);//3 row 6 column
            cell.setCellValue("");	//	投运日期
            cell.setCellStyle(contextStyle);
            cell=row.createCell(7);//3 row 7 column
            cell.setCellValue("");	//	运维部门
            cell.setCellStyle(contextStyle);
            cell=row.createCell(8);//3 row 8 column
            cell.setCellValue("");	//	运维班组
            cell.setCellStyle(contextStyle);
            cell=row.createCell(9);//3 row 9 column
            cell.setCellValue("");	//	出厂编号
            cell.setCellStyle(contextStyle);

            cell=row.createCell(10);//3 row 11 column
            cell.setCellValue("");	//	备注
            cell.setCellStyle(contextStyle);

        }

        ILine iLine1 = new ILine();
        iLine1.setByqId(id);
        List<ILine> iLineList = iLineService.selectILineList(iLine1);
        IPoint iPoint = new IPoint();
        iPoint.setByqId(id);
//        iPoint.setLineId(iLineList.get(i).getId());
        List<IPoint> iPointList = iPointService.selectIPointList(iPoint);
        Double var1 = 0D;
        List<ILine> iLineListss = new ArrayList<>();
        //  排除线路表中在点位中没有 采点的线路
        for (int i=0;i<iLineList.size();i++) {
            IPoint iPoint22 = new IPoint();
            iPoint22.setByqId(id);
            iPoint22.setLineId(iLineList.get(i).getId());
            List<IPoint> iPointList1 = iPointService.selectIPointList(iPoint22);
            if(iPointList1.size() != 0){
                iLineListss.add(iLineList.get(i));
            }
        }
       int asd = iDeviceList1.size();
        for (int i=0;i<iLineListss.size();i++) {

            for (int i1 = 0; i1 < iPointList.size(); i1++) {
                if(iPointList.get(i1).getType().equals("杆塔")){
                    if(iLineListss.get(i).getId().equals(iPointList.get(i1).getLineId()) && !iPointList.get(i1).getVoltage().equals("10kv")){
                        var1 += iPointList.get(i1).getSpan().doubleValue();

                        if(asd==0){
                            row=sheet.createRow(i+3);//创建第三行
                            row.setHeightInPoints(25);  // 行高
                        }else if(asd==1){
                            row=sheet.createRow(i+4);//创建第三行
                            row.setHeightInPoints(25);  // 行高
                        }else if(asd==2){
                            row=sheet.createRow(i+5);//创建第三行
                            row.setHeightInPoints(25);  // 行高
                        }


                    cell=row.createCell(0);//3 row 1 column
                    cell.setCellValue(iLineListss.get(i).getName());	//	设备名称
                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(1);//3 row 1 column
                    cell.setCellValue("千米");	//	计量单位
                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(2);//3 row 2 column
                    if(var1 == 0)
                        cell.setCellValue("");	//	数量
                    else
                        cell.setCellValue(new BigDecimal(var1/1000).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());	//	数量

                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(3);//3 row 3 column
                    cell.setCellValue("");	//	生产厂家
                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(4);//3 row 4 column
                    if (iLineListss.get(i).getRunCode() == null)
                        cell.setCellValue("");	//	设备型号
                    else
                        cell.setCellValue(iLineListss.get(i).getRunCode());	//	设备型号
                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(5);//3 row 5 column
                    cell.setCellValue("");	//	出厂年月
                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(6);//3 row 6 column
                    cell.setCellValue("");	//	投运日期
                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(7);//3 row 7 column
                    cell.setCellValue("");	//	运维部门
                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(8);//3 row 8 column
                    cell.setCellValue("");	//	运维班组
                    cell.setCellStyle(contextStyle);
                    cell=row.createCell(9);//3 row 9 column
                    cell.setCellValue("");	//	出厂编号
                    cell.setCellStyle(contextStyle);

                    cell=row.createCell(10);//3 row 11 column
                    cell.setCellValue("");	//	备注
                    cell.setCellStyle(contextStyle);
                    }
                }
            }

        }
        
        //从数据库取数据填充到Excel，这步省略，添加模拟数据
        /*List<PDevice> list = new ArrayList<>();
        for(int i = 0 ; i<pDeviceList.size();i++){//i从2开始计数，因为上面已经创建了 0 1行
            if (pDeviceList.get(i).getBigType().equals("低压配电柜")
                    || pDeviceList.get(i).getBigType().equals("采集终端")
                    || pDeviceList.get(i).getiLineList() != null
                    || pDeviceList.get(i).getbByqList() != null){
                list.add(pDeviceList.get(i));
            }
        }*/

        /*for(int i = 0 ; i<list.size();i++){//i从2开始计数，因为上面已经创建了 0 1行
                row=sheet.createRow(i+2);//创建第三行
                row.setHeightInPoints(25);  // 行高

            if (list.get(i).getbByqList() !=null){
                cell=row.createCell(0);//创建第三行第一列	//	序号列
                cell.setCellValue(i+1);//第三行第一列的值
                cell.setCellStyle(contextStyle);//设置样式

                cell=row.createCell(1);//3 row 1 column
                cell.setCellValue(list.get(i).getbByqList().get(0).getName());	//	设备名称
                cell.setCellStyle(contextStyle);
                cell=row.createCell(2);//3 row 1 column
                cell.setCellValue("台");	//	计量单位
                cell.setCellStyle(contextStyle);
                cell=row.createCell(3);//3 row 2 column
                cell.setCellValue(1);	//	数量
                cell.setCellStyle(contextStyle);
                cell=row.createCell(4);//3 row 3 column
                if (list.get(i).getbByqList().get(0).getFactory() == null)
                    cell.setCellValue("");	//	生产厂家
                else
                    cell.setCellValue(list.get(i).getbByqList().get(0).getFactory());	//	生产厂家
                cell.setCellStyle(contextStyle);
                cell=row.createCell(5);//3 row 4 column
                if (list.get(i).getbByqList().get(0).getModel() == null)
                    cell.setCellValue("");	//	设备型号
                else
                    cell.setCellValue(list.get(i).getbByqList().get(0).getModel());	//	设备型号
                cell.setCellStyle(contextStyle);
                cell=row.createCell(6);//3 row 5 column
                cell.setCellValue("");	//	出厂年月
                cell.setCellStyle(contextStyle);
                cell=row.createCell(7);//3 row 6 column
                if (list.get(i).getbByqList().get(0).getRunDate() ==null)
                    cell.setCellValue("");	//	投运日期
                else
                    cell.setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(list.get(i).getbByqList().get(0).getRunDate()));	//	投运日期
                cell.setCellStyle(contextStyle);
                cell=row.createCell(8);//3 row 7 column
                cell.setCellValue("");	//	运维部门
                cell.setCellStyle(contextStyle);
                cell=row.createCell(9);//3 row 8 column
                cell.setCellValue("");	//	运维班组
                cell.setCellStyle(contextStyle);
                cell=row.createCell(10);//3 row 9 column
                cell.setCellValue("");	//	出厂编号
                cell.setCellStyle(contextStyle);

                cell=row.createCell(11);//3 row 11 column
                cell.setCellValue("");	//	备注
                cell.setCellStyle(contextStyle);
            }

            if (list.get(i).getiLineList() !=null){
                cell=row.createCell(0);//创建第三行第一列	//	序号列
                cell.setCellValue(i+1);//第三行第一列的值
                cell.setCellStyle(contextStyle);//设置样式

                cell=row.createCell(1);//3 row 1 column
                cell.setCellValue(list.get(i).getiLineList().get(0).getName());	//	设备名称
                cell.setCellStyle(contextStyle);
                cell=row.createCell(2);//3 row 1 column
                cell.setCellValue("米");	//	计量单位
                cell.setCellStyle(contextStyle);
                cell=row.createCell(3);//3 row 2 column
                if (list.get(i).getiLineList().get(0).getTotalSpan() == null)
                    cell.setCellValue("");	//	设备型号
                else
                    cell.setCellValue(list.get(i).getiLineList().get(0).getTotalSpan().toString());	//	数量
                cell.setCellStyle(contextStyle);
                cell=row.createCell(4);//3 row 3 column
                cell.setCellValue("");	//	生产厂家
                cell.setCellStyle(contextStyle);
                cell=row.createCell(5);//3 row 4 column
                if (list.get(i).getiLineList().get(0).getRunCode() == null)
                    cell.setCellValue("");	//	设备型号
                else
                    cell.setCellValue(list.get(i).getiLineList().get(0).getRunCode());	//	设备型号
                cell.setCellStyle(contextStyle);
                cell=row.createCell(6);//3 row 5 column
                cell.setCellValue("");	//	出厂年月
                cell.setCellStyle(contextStyle);
                cell=row.createCell(7);//3 row 6 column
                cell.setCellValue("");	//	投运日期
                cell.setCellStyle(contextStyle);
                cell=row.createCell(8);//3 row 7 column
                cell.setCellValue("");	//	运维部门
                cell.setCellStyle(contextStyle);
                cell=row.createCell(9);//3 row 8 column
                cell.setCellValue("");	//	运维班组
                cell.setCellStyle(contextStyle);
                cell=row.createCell(10);//3 row 9 column
                cell.setCellValue("");	//	出厂编号
                cell.setCellStyle(contextStyle);

                cell=row.createCell(11);//3 row 11 column
                cell.setCellValue("");	//	备注
                cell.setCellStyle(contextStyle);
            }

            if (list.get(i).getiLineList() == null && list.get(i).getbByqList()==null){
                cell=row.createCell(0);//创建第三行第一列	//	序号列
                cell.setCellValue(i+1);//第三行第一列的值
                cell.setCellStyle(contextStyle);//设置样式

                cell=row.createCell(1);//3 row 1 column
                cell.setCellValue(list.get(i).getBigType());	//	设备名称
                cell.setCellStyle(contextStyle);
                cell=row.createCell(2);//3 row 1 column
                cell.setCellValue("台");	//	计量单位
                cell.setCellStyle(contextStyle);
                cell=row.createCell(3);//3 row 2 column
                cell.setCellValue(1);	//	数量
                cell.setCellStyle(contextStyle);
                cell=row.createCell(4);//3 row 3 column
                cell.setCellValue("");	//	生产厂家
                cell.setCellStyle(contextStyle);
                cell=row.createCell(5);//3 row 4 column
                cell.setCellValue(list.get(i).getModle());	//	设备型号
                cell.setCellStyle(contextStyle);
                cell=row.createCell(6);//3 row 5 column
                cell.setCellValue("");	//	出厂年月
                cell.setCellStyle(contextStyle);
                cell=row.createCell(7);//3 row 6 column
                cell.setCellValue("");	//	投运日期
                cell.setCellStyle(contextStyle);
                cell=row.createCell(8);//3 row 7 column
                cell.setCellValue("");	//	运维部门
                cell.setCellStyle(contextStyle);
                cell=row.createCell(9);//3 row 8 column
                cell.setCellValue("");	//	运维班组
                cell.setCellStyle(contextStyle);
                cell=row.createCell(10);//3 row 9 column
                cell.setCellValue("");	//	出厂编号
                cell.setCellStyle(contextStyle);

                cell=row.createCell(11);//3 row 11 column
                cell.setCellValue("");	//	备注
                cell.setCellStyle(contextStyle);
            }
        }*/
            return workbook;
    }


    /**
     * 设置表单，并生成表单
     *
     * @param workbook
     * @param sheetName
     * @return
     */
    public static HSSFSheet genSheet(HSSFWorkbook workbook, String sheetName){
        //生成表单
        HSSFSheet sheet = workbook.createSheet(sheetName);
        //设置表单文本居中
        sheet.setHorizontallyCenter(true);
        sheet.setFitToPage(false);
        //打印时在底部右边显示文本页信息
        Footer footer = sheet.getFooter();
        footer.setRight( "Page " + HeaderFooter.numPages()+ " Of "+ HeaderFooter.page());
        //打印时在头部右边显示Excel创建日期信息
        Header header = sheet.getHeader();
        header.setRight("Create Date " + HeaderFooter.date() + " " + HeaderFooter.time());
        //设置打印方式
        HSSFPrintSetup ps = sheet.getPrintSetup();
        ps.setLandscape(true); // true：横向打印，false：竖向打印 ，因为列数较多，推荐在打印时横向打印
        ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE); //打印尺寸大小设置为A4纸大小
        return sheet;
    }

    /**
     * 创建文本样式
     *
     * @param workbook
     * @return
     */
    public static HSSFCellStyle genContextStyle(HSSFWorkbook workbook){
        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);//文本水平居中显示
        style.setVerticalAlignment(VerticalAlignment.CENTER);//文本竖直居中显示
        style.setWrapText(true);//文本自动换行
        HSSFFont hssfFont = workbook.createFont();  //  设置正文字体大小
        hssfFont.setFontHeight((short)9);
        hssfFont.setFontHeightInPoints((short) 9);
        style.setFont(hssfFont);

        //生成Excel表单，需要给文本添加边框样式和颜色
        /*
             CellStyle.BORDER_DOUBLE      双边线
             CellStyle.BORDER_THIN        细边线
             CellStyle.BORDER_MEDIUM      中等边线
             CellStyle.BORDER_DASHED      虚线边线
             CellStyle.BORDER_HAIR        小圆点虚线边线
             CellStyle.BORDER_THICK       粗边线
         */

        style.setBorderBottom(BorderStyle.THIN);//设置文本边框
        style.setBorderLeft(BorderStyle.THIN);
        style.setBorderRight(BorderStyle.THIN);
        style.setBorderTop(BorderStyle.THIN);
        //set border color
        style.setTopBorderColor((short)8);//设置文本边框颜色
        style.setBottomBorderColor((short)8);
        style.setLeftBorderColor((short)8);
        style.setRightBorderColor((short)8);

        return style;
    }


    /**
     * 创建合并单元格的样式
     *
     * @param
     * @return
     */
    public static void setRegionStyle(BorderStyle border,CellRangeAddress region, Sheet sheet){
        RegionUtil.setBorderBottom(BorderStyle.THIN,region,sheet);
        RegionUtil.setBorderTop(BorderStyle.THIN,region,sheet);
        RegionUtil.setBorderLeft(BorderStyle.THIN,region,sheet);
        RegionUtil.setBorderRight(BorderStyle.THIN,region,sheet);
    }

    /**
     * 生成标题样式
     *
     * @param workbook
     * @return
     */
    public static HSSFCellStyle genTitleStyle(HSSFWorkbook workbook){

        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        style.setWrapText(true);

        //标题居中，没有边框，所以这里没有设置边框，设置标题文字样式
        HSSFFont titleFont = workbook.createFont();
        titleFont.setBold(true);//加粗
        titleFont.setFontHeight((short)15);//文字尺寸
        titleFont.setFontHeightInPoints((short)15);
        style.setFont(titleFont);

        return style;
    }


    /**
     *  导出照片
     */
    @RequestMapping("/photo")
    public void exportsimg(String id , HttpServletRequest request, HttpServletResponse response) throws IOException, DocumentException {
        BByq bByq = bByqService.selectBByqById(id);

        response.setContentType("application/msword;charset=utf-8");
        try {
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(((bByq.getName()==null?"":bByq.getName()) + "照片.doc").getBytes(), "iso-8859-1"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        Document document = new Document();
        BaseFont bfChinese = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

        RtfWriter2.getInstance(document, response.getOutputStream());
        com.lowagie.text.Font titleFontye = new com.lowagie.text.Font(bfChinese,8, com.lowagie.text.Font.BOLD);
        com.lowagie.text.HeaderFooter footer = new com.lowagie.text.HeaderFooter(new Phrase("页码：",titleFontye), true);
        footer.setAlignment(1);
        footer.setBorder(Rectangle.NO_BORDER);

        document.setFooter(footer);
        document.open();
        setexportsimg(document,bfChinese,bByq);

        document.close();


    }
    public void setexportsimg(Document document  ,BaseFont bfChinese ,BByq bByq ) throws DocumentException, IOException {

        //表题字体
        com.lowagie.text.Font titleFont = new com.lowagie.text.Font(bfChinese,11, com.lowagie.text.Font.BOLD);
        //表格字体
        com.lowagie.text.Font contextFont = new com.lowagie.text.Font(bfChinese, 8, com.lowagie.text.Font.NORMAL);
        // 签字字体
        com.lowagie.text.Font qinFont = new com.lowagie.text.Font(bfChinese, 10, com.lowagie.text.Font.NORMAL);
        Paragraph title = new Paragraph((bByq.getName()==null?"":bByq.getName()) + "照片");
        title.setAlignment(Element.ALIGN_CENTER);
        title.setFont(titleFont);
        document.add(title);

        IPoint iPoint = new IPoint();
        iPoint.setByqId(bByq.getId());
        List<IPoint> iPointList = iPointService.selectIPointList(iPoint);

        addpoleimg(document, bByq, contextFont, iPointList);

    }



    private void addpoleimg(Document document, BByq bByq, com.lowagie.text.Font contextFont, List<IPoint> iPointList) throws DocumentException, IOException {
        for(IPoint iPoint:iPointList) {

            IPicture iPicture = new IPicture();
            iPicture.setPId(iPoint.getId());
            List<IPicture> iPictureList = iPictureService.selectIPictureList(iPicture);

            ILine iLine = iLineService.selectILineById(iPoint.getLineId());

            document.setMargins(40F,40F,20F,73F);	//	文档边距
            if(iPictureList.size()>0) {

                Table table = new Table(6);
                int[] withs = {1, 2, 1, 2, 1, 2};
                table.setWidths(withs);
//                * 表格所占页面宽度 author:yyli Sep 15, 2010
                table.setWidth(90);

//                * 居中显示 author:yyli Sep 15, 2010
                table.setAlignment(Element.ALIGN_CENTER);
//                * 自动填满 author:yyli Sep 15, 2010
                table.setAutoFillEmptyCells(true);

                if(!iPoint.getType().equals("变压器"))
                    OutPutUtils.addcell(table, iLine.getName()+"-"+iPoint.getCode()+"("+iPoint.getType()+")" , 0, 6, true, contextFont);
                else
                    OutPutUtils.addcell(table, iPoint.getCode()+"("+iPoint.getType()+")" , 0, 6, true, contextFont);

                //	一个点位设定最多显示3张照片
				int chushu = iPictureList.size() / 3;
				int yushu = iPictureList.size() % 3;

				if (yushu > 0) {
                    chushu = chushu + 1;
				}

//                int chushu = 1;
                for (int i = 0; i < chushu; i++) {
                    boolean one = false;
                    boolean two = false;
                    boolean three = false;

                    if ((3 * i) < iPictureList.size()) {
                        one = true;
                    }
                    if (((3 * i) + 1) < iPictureList.size()) {
                        two = true;
                    }
                    if (((3 * i) + 2) < iPictureList.size()) {
                        three = true;
                    }
                    if (one) {
                        File file=new File(ROOT +   iPictureList.get(3 * i).getAddress());
                        if(file.exists())
                        {
                            OutPutUtils.addcellimg(table, ROOT +   iPictureList.get(3 * i).getAddress(), 8, 2, true, contextFont);
                        }
                        else
                        {
                            OutPutUtils.addcell(table, "没找到照片", 8, 2, true, contextFont);

                        }
                    } else {
                        OutPutUtils.addcell(table, "", 8, 2, true, contextFont);
                    }
                    if (two) {
                        File file=new File(ROOT +   iPictureList.get((3 * i)+1).getAddress());
                        if(file.exists())
                        {
                            OutPutUtils.addcellimg(table, ROOT +   iPictureList.get((3 * i)+1).getAddress(), 8, 2, true, contextFont);
                        }
                        else
                        {
                            OutPutUtils.addcell(table, "没找到照片", 8, 2, true, contextFont);

                        }
                    } else {
                        OutPutUtils.addcell(table, "", 8, 2, true, contextFont);
                    }
                    if (three) {
                        File file=new File(ROOT +   iPictureList.get((3 * i)+2).getAddress());
                        if(file.exists())
                        {
                            OutPutUtils.addcellimg(table, ROOT +   iPictureList.get((3 * i)+2).getAddress(), 8, 2, true, contextFont);
                        }
                        else
                        {
                            OutPutUtils.addcell(table, "没找到照片", 8, 2, true, contextFont);

                        }
                    } else {
                        OutPutUtils.addcell(table, "", 8, 2, true, contextFont);
                    }


                    OutPutUtils.addcell(table, "名称", 0, 0, true, contextFont);
                    if (one) {
                        OutPutUtils.addcell(table, iPictureList.get(3 * i).getType(), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }
                    OutPutUtils.addcell(table, "名称", 0, 0, true, contextFont);
                    if (two) {
                        OutPutUtils.addcell(table, iPictureList.get((3 * i) + 1).getType(), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }
                    OutPutUtils.addcell(table, "名称", 0, 0, true, contextFont);
                    if (three) {
                        OutPutUtils.addcell(table, iPictureList.get((3 * i) + 2).getType(), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }

                    OutPutUtils.addcell(table, "来源", 0, 0, true, contextFont);
                    if (one) {
                        OutPutUtils.addcell(table, iPictureList.get(3 * i).getResour(), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }
                    OutPutUtils.addcell(table, "来源", 0, 0, true, contextFont);
                    if (two) {
                        OutPutUtils.addcell(table, iPictureList.get((3 * i) + 1).getResour(), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }
                    OutPutUtils.addcell(table, "来源", 0, 0, true, contextFont);
                    if (three) {
                        OutPutUtils.addcell(table, iPictureList.get((3 * i) + 2).getResour(), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }

                    OutPutUtils.addcell(table, "时间", 0, 0, true, contextFont);
                    if (one) {
                        OutPutUtils.addcell(table, iPictureList.get(3 * i).getTime() == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(iPictureList.get(3 * i).getTime()), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }
                    OutPutUtils.addcell(table, "时间", 0, 0, true, contextFont);
                    if (two) {
                        OutPutUtils.addcell(table, iPictureList.get((3 * i) + 1).getTime() == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(iPictureList.get((3 * i) + 1).getTime()), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }
                    OutPutUtils.addcell(table, "时间", 0, 0, true, contextFont);
                    if (three) {
                        OutPutUtils.addcell(table, iPictureList.get((3 * i) + 2).getTime() == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(iPictureList.get((3 * i) + 2).getTime()), 0, 0, true, contextFont);
                    } else {
                        OutPutUtils.addcell(table, "", 0, 0, true, contextFont);
                    }

                }
//                Paragraph nuss = new Paragraph("");	//	表与表之间加空行（调整格式）
//                document.add(nuss);
                document.add(table);
            }
        }
    }


}
